package org.qpcr.community.device.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.time.Duration;

/**
 * 消息队列配置类
 * 配置响应式消息队列服务的相关参数
 */
@Configuration
@ConfigurationProperties(prefix = "tylinks.message-queue")
@Data
public class MessageQueueConfig {

    /**
     * 默认重试次数
     */
    private int defaultRetryCount = 3;

    /**
     * 默认重试延迟（毫秒）
     */
    private long defaultRetryDelayMs = 1000;

    /**
     * 默认轮询间隔（毫秒）
     */
    private long defaultPollIntervalMs = 500;

    /**
     * 默认消息超时时间（毫秒）
     */
    private long defaultMessageTimeoutMs = 5000;

    /**
     * 批量发送并发度
     */
    private int batchConcurrency = 5;

    /**
     * 背压缓冲区大小
     */
    private int backpressureBufferSize = 1000;

    /**
     * 背压处理策略: BUFFER, DROP, LATEST, ERROR
     */
    private String backpressureStrategy = "BUFFER";

    /**
     * 获取默认重试延迟
     */
    public Duration getDefaultRetryDelay() {
        return Duration.ofMillis(defaultRetryDelayMs);
    }

    /**
     * 获取默认轮询间隔
     */
    public Duration getDefaultPollInterval() {
        return Duration.ofMillis(defaultPollIntervalMs);
    }

    /**
     * 获取默认消息超时时间
     */
    public Duration getDefaultMessageTimeout() {
        return Duration.ofMillis(defaultMessageTimeoutMs);
    }

    /**
     * 获取背压缓冲区大小
     */
    public int getBackpressureBufferSize() {
        return backpressureBufferSize;
    }

    /**
     * 获取背压处理策略
     */
    public String getBackpressureStrategy() {
        return backpressureStrategy;
    }
}
